Très simple, il suffit de modifier la variable, ici on s'intéressera uniquement à PS1, car c'est exactement la même chose pour PS2,PS3 et PS4, et c'est moins utile.
Pour modifier la variable le temps de la session (jusqu'à ce que l'on ferme le terminal ou l'émulateur), on utilise la commande « export ». Exemple :
$ export PS1="MON NOUVEAU PROMPT $ "
C'est très pratique pour tester les valeurs de PS1 d'autres personnes !
Pour que cela soit valable pour chaque session, il faut sauvegarder la ligne (sans le « export ») dans le fichier « .bashrc » du répertoire de l'utilisateur.
Si la ligne « PS1="..." » existe déjà, il suffit de la commenter en la précédent d'un dièse.
Et qu'est ce qu'on met dans cette variable ?
Dans cette variable, on va ajouter des caractères spéciaux (sorte de raccourcis toujours précédés d'un antislash « \ » ) pour afficher ce que l'on veut.
On peut également ajouter des commandes.
Voici une liste de caractères spéciaux :
•.\u : le nom d'utilisateur courant (exemple : « kazenojiyu »)
•.\h : affiche le nom d'hôte jusqu'au premier point "." (exemple : « kazenojiyu-Laptop » )
•.\H : affiche le nom d'hôte en entier ( exemple : « kazenojiyu-Laptop.localhost » )
•.\w : le répertoire courant ( exemple : « ~/Documents/articles/article_terminal » )
•.\W : basename du répertoire courant ( exemple : « article_terminal » )
•.\$ : « # » si l'utilisateur courant est super-utilisateur, « $ » sinon
•.\j : le nombre de processus gérés par le terminal courant ( exemple : « 0 » )
•.! : le nombre de commande dans l'historique ( exemple : « 452 » )
•.# : le nombre de commande dans l'historique de la session courante ( exemple : « 5 » )
•.\s : le nom du shell ( exemple : « bash » )
•.\v : la version du bash ( exemple : « 4.3 » )
•.\V : numéro de version en entier : majeur.mineure.patchlevel ( exemple : « 4.3.43 » )
•.\T : l'heure au format 12h HH:MM:SS ( exemple : « 09:45:50 » )
•.\t : l'heure au format 24h HH:MM:SS ( exemple : « 21:45:50 » )
•.\@ : l'heure au format 12h am/pm HH:MM ( exemple : « 09:45 » )
•.\A : l'heure au format 24h am/pm HH:MM ( exemple : « 21:45 » )
•.\d : la date au format « jour mois date » ( exemple : « jeu. juil. 21 » )
•.\D : date au format spécifié (plus d'info sur le format : man strftime) ( exemple pour « \D{%d/%m/%Y %H:%M:%S} » : « 21/07/2016 21:43:54 »)
•.\n : saut de ligne
•.\r : retour chariot
•.\ : antislash
•.\e : caractère d'échappement ASCII, équivalent à \033 (utile pour ajouter les couleurs)
•.[ : début de chaîne contenant des caractères non imprimable
•.] : fin de chaîne contenant des caractères non imprimable
Avec tout ça vous avez de quoi vous amuser sur votre prompt, exemple :
$ export PS1="\u@\h:\w>[\A]{\j}\$ "
Si vous n'en avez pas assez, sachez qu'il est possible d'ajouter toutes les commandes possibles et imaginables :
•.afficher le résultat d'un commande : $(<commande>)
•.load average (pourcentage d'utilisation des coeurs de CPU) : $(cut -d ' ' -f 1-3 /proc/loadavg)
•.durée d'activité du système depuis le dernier boot : $(uptime | cut -d, -f1 | sed -e 's/.*up//')
•.nombre de processus en pause : $(jobs | wc -l | awk '{print $1}')
•.nombre de processus en cours d'exécution : $(ps ax | wc -l | tr -d ' ')
Et la couleur alors ?
Pour cela, il faut utiliser les caractères spéciaux \e, \[, \].
Le structure pour une couleur est : \e[<gras>;<couleur ou fond>m
Les codes couleurs utilisés comportent 2 éléments, le premier indique si le texte doit être en gras (0 ou 1) et le second le code couleur (30 à 37 sans couleur de fond et 40 à 47 avec couleur de fond).
Voici une illustration des codes couleurs :
Par exemple si l'on veut un jaune, gras, sans fond, cela donnera : « \e[1;33m », et tout ce qui suivra sera dans cette couleur.
Pour que l'utilisation de la couleur s'arrête, il faut utiliser le code suivant : « \e[0m ».
Enfin, chaque code couleur est un code nom imprimable, il faut donc l'encadrer par les caractères adéquat : \[ et \]. Cela permet de spécifier à bash que ce n'est pas des caractères imprimables, et ça évite des soucis lors du calcul de la longueur de chaîne.
Voici le prompt que j'utilise :
PS1="\[\e[1;31m\]${debian_chroot:+($debian_chroot)}\u\[\e[1;34m\]@\[\e[1;32m\]\h\[\e[1;34m\]:\[\e[1;33m\]\w\[\e[1;34m\]:\[\e[0;36m\][\j]\[\e[0m\]\$ "
Vous pouvez l'essayer avec la commande « export » :
$ export PS1="\[\e[1;31m\]${debian_chroot:+($debian_chroot)}\u\[\e[1;34m\]@\[\e[1;32m\]\h\[\e[1;34m\]:\[\e[1;33m\]\w\[\e[1;34m\]:\[\e[0;36m\][\j]\[\e[0m\]\$ "
Pour revenir à votre version vous pouvez soit fermer le terminal et le relancer, soit utiliser la commande « source » si vous avez déjà renseigné la variable PS1 :
$ source ~/.bashrc
À noter que cette partie ${debian_chroot:+($debian_chroot)} n'est utile que pour les utilisateurs de debian et ses dérivés (Ubuntu par exemple). C'est utile si vous utilisez la commande « chroot » pour savoir où vous en êtes (chroot ou non).
Pour les plus curieux, voici le script permettant d'afficher les codes couleurs :
#!/bin/bash
NC='\e[0m' # No Color
# normal
for i in {30..37}
do
color="\e[0;${i}m" # normal
printf " ${color}0;${i}${NC}"
done
echo
# bold
for i in {30..37}
do
color="\e[1;${i}m" # bold
printf " ${color}1;${i}${NC}"
done
echo
# normal with background
for i in {40..47}
do
color="\e[0;${i}m" # normal
printf " ${color}0;${i}${NC}"
done
echo
# bold with background
for i in {40..47}
do
color="\e[1;${i}m" # bold
printf " ${color}1;${i}${NC}"
done
echo
Lorsque l'on liste le contenu d'un répertoire ( commande « ls »), différentes couleurs apparaissent en fonction du type de fichier.
Il est également possible de personnaliser ces couleurs.
Pour cela, il vous faut déjà créer l'alias suivant (à placer dans le fichier ~/.bashrc) :
alias ls="ls --color"
Cela permet d'ajouter de la couleur dans la commande « ls » de base.
Ensuite on va utiliser la commande « dircolors » pour générer le fichier d'association des couleurs.
$ dircolors -p > ~/.ls_colors
Ce fichier contiens un code couleur pour un ou plusieurs types de fichiers et un ou plusieurs codes couleur pour les extensions choisies.
Vous pouvez dès à présent modifier les couleurs comme bon vous semble.
Pour cela vous pouvez vous référer aux codes couleur spécifiés plus haut, sinon le fichier rappelle les valeurs des codes en commentaire.
Vous pouvez tester vos modifications en tapant :
$ eval `dircolors ~/.ls_colors`
$ ls
Si vous êtes satisfait du résultats, il suffit d'ajouter cette commande à votre fichier ~/.bashrc :
eval `dircolors ~/.ls_colors`